Alqor — Bölmə 10: Standart Kitabxana#
10.1 nüvə — avtomatik idxal olunur#
Bu modul hər faylda gətir olmadan əlçatandır.
Giriş / Çıxış#
yaz(...) // ekrana yaz, sonda yeni sətir
yazSətirsiz(...) // yeni sətirsiz
yazXəta(...) // stderr-ə yaz
oxu() -> mətn // bir sətir oxu
oxu("Adınız: ") -> mətn // soruşaraq oxu
oxuTam("Yaş: ") -> tam // ədəd oxu (yanlışdırsa təkrar soruş)
oxuOnluq("Qiymət: ") -> onluq
oxuMəntiq("Razısınız? ") -> məntiq
oxuHamısı() -> mətn // stdin-dən hamısını oxuTip və çevirmə#
tip(x) -> mətn // "tam", "mətn", "siyahı[tam]" ...
tamƏt(x, standart?) -> tam
onluqƏt(x, standart?) -> onluq
mətnƏt(x) -> mətn
məntiqƏt(x) -> məntiq
simvolƏt(kod: tam) -> simvol
kodƏt(s: simvol) -> tamKolleksiya köməkçiləri#
uzunluq(x) -> tam // mətn, siyahı, lüğət, dəst, kortej
boşdur(x) -> məntiq
diapazon(son) -> Diapazon
diapazon(başlanğıc, son, addım?) -> Diapazon
sırala(kolleksiya, açar?) -> siyahı
tərs(kolleksiya) -> siyahı
cəm(kolleksiya) -> tam | onluq
minimum(...) -> T
maksimum(...) -> T
nömrələ(kolleksiya) -> siyahı[kortej[tam, T]]
zip(a, b) -> siyahı[kortej]Digər#
eynidir(a, b) -> məntiq // istinad identikliyi
heş(x) -> tam
klonla(x) -> T // dərin kopya
çap(x) // debaq üçün strukturlu çap
ölç(funksiya) // icra müddətini ölç
dayan(kod: tam = 0) // proqramı bitir
panika(mesaj: mətn)10.2 mətn#
Metodlar#
dəyişən m = "Salam, Dünya"
m.uzunluq() -> tam // 12 (qrafem sayı)
m.baytUzunluğu() -> tam // UTF-8 bayt sayı
m.böyüyə() -> mətn // "SALAM, DÜNYA" (az-AZ qaydası)
m.kiçiyə() -> mətn // "salam, dünya"
m.başBöyük() -> mətn // "Salam, dünya"
m.hərSözBöyük() -> mətn // "Salam, Dünya"
m.kəs() -> mətn // başdan-sondan boşluq sil
m.başKəs() / m.sonKəs() -> mətn
m.əvəz("a", "e") -> mətn // bütün uyğunluqları
m.əvəzİlk("a", "e") -> mətn
m.böl(", ") -> siyahı[mətn] // ["Salam", "Dünya"]
m.böl() -> siyahı[mətn] // boşluqlara görə
m.böl("", 3) -> siyahı[mətn] // maksimum 3 hissə
m.sətirlər() -> siyahı[mətn]
m.simvollar() -> siyahı[simvol]
m.baytlar() -> siyahı[bayt]
m.sözlər() -> siyahı[mətn]
m.birləşdir(siyahı) -> mətn // ", ".birləşdir(["a","b"]) → "a, b"
m.ehtiva("Dün") -> məntiq
m.başlayır("Sal") -> məntiq
m.bitir("ya") -> məntiq
m.tap("Dün") -> tam? // indeks və ya boş
m.sonTap("a") -> tam?
m.hamısınıTap("a") -> siyahı[tam]
m.say("a") -> tam
m.dilim(0, 5) -> mətn // "Salam"
m.təkrar(3) -> mətn
m.tərs() -> mətn
m.doldur(20) -> mətn // sağa boşluq
m.solDoldur(20, "0") -> mətn
m.sağDoldur(20, "0") -> mətn
m.mərkəz(20) -> mətn
m.boşdur() -> məntiq
m.yalnızBoşluq() -> məntiq
m.rəqəmdir() -> məntiq
m.hərfdir() -> məntiq
m.müqayisə(digər) -> tam // az-AZ collation
m.müqayisəHərfsiz(digər) -> tam
m.normalizasiya() -> mətn // NFC
m.latınla() -> mətn // "ə"→"e", "ş"→"s" (URL üçün)
m.URLKodla() -> mətn
m.URLAç() -> mətn
m.base64Kodla() -> mətn
m.base64Aç() -> mətn
m.HTMLQaç() -> mətnFormatlaşdırma#
mətn.formatla("Salam, {}!", "Dünya")
mətn.formatla("{1} {0}", "dünya", "salam")
mətn.yerliƏdəd(1234.56) -> "1 234,56" // Azərbaycan formatı
mətn.yerliPul(1234.56) -> "1 234,56 ₼"
mətn.yerliFaiz(0.185) -> "18,5 %"Azərbaycan dilinə xas#
mətn.hecalara("salam") -> ["sa", "lam"]
mətn.saitdir(`a`) -> məntiq
mətn.samitdir(`s`) -> məntiq
mətn.qalınSait(`a`) -> məntiq // a, ı, o, u
mətn.incəSait(`ə`) -> məntiq // e, ə, i, ö, ü
mətn.şəkilçi("kitab", "lar") -> "kitablar" // ahəng qanununa uyğun
mətn.hallandır("kitab", "yönlük") -> "kitaba"
mətn.yazıylaƏdəd(125) -> "yüz iyirmi beş"
mətn.sıraSayı(3) -> "üçüncü"10.3 siyahı#
dəyişən s = [3, 1, 4, 1, 5]
// Dəyişdirən
s.əlavə(9) // sona əlavə
s.əlavəHamısı([2, 6])
s.daxilEt(0, 7) // indeksə daxil et
s.sil(2) // indeksə görə sil → silinən dəyər
s.silDəyər(1) // ilk tapılan dəyəri sil
s.silHamısı(1) // bütün uyğunluqları sil
s.sonunuSil() -> T // pop
s.təmizlə()
s.sırala() // yerində sırala
s.sırala((a, b) => b <=> a) // azalan
s.sıralaAçar((x) => x.yaş)
s.qarışdır()
s.tərsinəÇevir()
// Dəyişdirməyən (yeni siyahı qaytarır)
s.sıralanmış() -> siyahı
s.tərs() -> siyahı
s.dilim(1, 3) -> siyahı
s.çevir((x) => x * 2) -> siyahı
s.filtr((x) => x > 2) -> siyahı
s.yığ(0, (a, b) => a + b) -> T
s.yığSağdan(0, (a, b) => a + b) -> T
s.düzlə() -> siyahı // iç-içə siyahıları açır
s.düzləÇevir((x) => [x, x]) -> siyahı
s.təkrarsız() -> siyahı
s.birləşdir(digər) -> siyahı
s.qrupla((x) => x % 2) -> lüğət
s.hissələrə(2) -> siyahı[siyahı] // [[3,1],[4,1],[5]]
s.pəncərə(3) -> siyahı[siyahı] // sürüşən pəncərə
s.zip(digər) -> siyahı[kortej]
s.nömrələ() -> siyahı[kortej[tam, T]]
// Sorğu
s.uzunluq() -> tam
s.boşdur() -> məntiq
s.ehtiva(4) -> məntiq
s.tap((x) => x > 3) -> T?
s.tapİndeks((x) => x > 3) -> tam?
s.indeks(4) -> tam?
s.sonİndeks(1) -> tam?
s.say(1) -> tam
s.sayŞərt((x) => x > 2) -> tam
s.hamısı((x) => x > 0) -> məntiq
s.hərHansı((x) => x > 4) -> məntiq
s.heçBiri((x) => x > 10) -> məntiq
s.ilk() -> T?
s.son() -> T?
s.minimum() -> T?
s.maksimum() -> T?
s.cəm() -> T
s.orta() -> onluq
s.hərBiri((x) => yaz(x))
s.klonla() -> siyahı10.4 lüğət#
dəyişən l = {"a": 1, "b": 2}
l.al("a") -> D?
l.al("z", 0) -> D // standart dəyərlə
l.qoy("c", 3)
l.sil("a") -> D?
l.təmizlə()
l.ehtiva("a") -> məntiq
l.ehtivaDəyər(1) -> məntiq
l.uzunluq() -> tam
l.boşdur() -> məntiq
l.açarlar() -> siyahı[A]
l.dəyərlər() -> siyahı[D]
l.cütlər() -> siyahı[kortej[A, D]]
l.birləşdir(digər) -> lüğət
l.çevir((a, d) => (a, d * 2)) -> lüğət
l.filtr((a, d) => d > 1) -> lüğət
l.hərBiri((a, d) => yaz("{a}={d}"))
l.alVəYaQoy("x", () => hesabla()) -> D
l.yenilə("a", (köhnə) => köhnə + 1)
l.tərsÇevir() -> lüğət // açar↔dəyər
l.klonla() -> lüğət10.5 dəst#
dəyişən d = dəst(1, 2, 3)
d.əlavə(4)
d.sil(1)
d.ehtiva(2) -> məntiq
d.uzunluq() -> tam
d.təmizlə()
d.birləşmə(digər) -> dəst // ∪
d.kəsişmə(digər) -> dəst // ∩
d.fərq(digər) -> dəst // \
d.simmetrikFərq(digər) -> dəst // △
d.altDəstdir(digər) -> məntiq // ⊆
d.üstDəstdir(digər) -> məntiq // ⊇
d.kəsişmir(digər) -> məntiq
d.siyahıyaÇevir() -> siyahı10.6 riyaziyyat#
gətir riyaziyyat kimi r
// Sabitlər
r.Pİ // 3.14159265358979
r.E // 2.71828182845905
r.TAU // 2π
r.QIZILNİSBƏT // 1.618...
r.SONSUZ
r.ƏDƏDDEYİL
// Əsas
r.mütləq(-5) -> 5
r.işarə(-5) -> -1
r.kök(16) -> 4.0
r.kubKök(27) -> 3.0
r.qüvvət(2, 10) -> 1024
r.eksp(1) -> 2.718
r.loq(100) -> 4.605 // təbii
r.loq10(100) -> 2.0
r.loq2(8) -> 3.0
r.loqƏsas(8, 2) -> 3.0
// Yuvarlaqlaşdırma
r.yuvarlaqlaşdır(3.7) -> 4
r.yuvarlaqlaşdır(3.456, 2) -> 3.46
r.aşağıYuvarlaq(3.7) -> 3 // floor
r.yuxarıYuvarlaq(3.2) -> 4 // ceil
r.kəs(3.7) -> 3 // trunc
// Müqayisə
r.min(1, 2, 3) -> 1
r.maks(1, 2, 3) -> 3
r.məhdudla(dəyər, min, maks) -> T
// Triqonometriya (radian)
r.sin(x) r.kos(x) r.tan(x)
r.arksin(x) r.arkkos(x) r.arktan(x) r.arktan2(y, x)
r.hipsin(x) r.hipkos(x) r.hiptan(x)
r.dərəcəyə(radian) -> onluq
r.radiana(dərəcə) -> onluq
// Tam ədədlər
r.ƏBOB(12, 18) -> 6 // ən böyük ortaq bölən
r.ƏKOB(4, 6) -> 12 // ən kiçik ortaq bölünən
r.faktorial(5) -> 120
r.sadədir(17) -> doğru
r.sadəBölənlər(12) -> [2, 2, 3]
r.modul(-7, 3) -> 2 // riyazi modul (həmişə müsbət)
r.modQüvvət(2, 10, 1000) -> 24
// Yoxlama
r.ədəddirmi(x) -> məntiq
r.sonludur(x) -> məntiq
r.tamdır(3.0) -> doğru
// Statistika
r.orta([1,2,3]) -> 2.0
r.median([1,2,3,4]) -> 2.5
r.moda([1,1,2]) -> 1
r.dispersiya([1,2,3]) -> onluq
r.standartKənarlaşma([1,2,3]) -> onluq
// Dəqiq hesablamalar (pul üçün)
r.onluqDəqiq("19.99") + r.onluqDəqiq("0.01") // dəqiq 20.0010.7 təsadüfi#
gətir təsadüfi kimi t
t.tam(1, 100) -> tam // 1..100 daxil
t.onluq() -> onluq // 0.0..1.0
t.onluq(1.0, 10.0) -> onluq
t.məntiq() -> məntiq
t.seç([1,2,3]) -> T
t.seçN([1,2,3], 2) -> siyahı
t.qarışdır(siyahı)
t.mətn(10) -> mətn // təsadüfi 10 simvol
t.UUID() -> mətn
t.toxum(42) // təkrarlanan nəticə üçün
t.təhlükəsizBaytlar(32) -> siyahı[bayt] // kriptoqrafik10.8 vaxt#
gətir vaxt
// İndiki vaxt
vaxt.indi() -> Zaman
vaxt.bugün() -> Tarix
vaxt.möhür() -> tam // Unix timestamp (saniyə)
vaxt.möhürMs() -> tam
// Yaratma
vaxt.tarix(2026, 10, 5) -> Tarix
vaxt.zaman(2026, 10, 5, 14, 30, 0) -> Zaman
vaxt.oxu("2026-10-05", "YYYY-MM-DD") -> Tarix
vaxt.ISO("2026-10-05T14:30:00Z") -> Zaman
// Zaman obyektinin üzvləri
z.il() z.ay() z.gün() z.saat() z.dəqiqə() z.saniye() z.millisaniyə()
z.həftəGünü() -> tam // 1=B.e., 7=Bazar
z.ilinGünü() -> tam
z.həftə() -> tam
z.rüb() -> tam
// Formatlaşdırma
z.formatla("DD.MM.YYYY") -> "05.10.2026"
z.formatla("YYYY-MM-DD HH:mm:ss")
z.ISO() -> "2026-10-05T14:30:00Z"
z.azərbaycanca() -> "5 oktyabr 2026, bazar"
z.qısa() -> "05.10.2026"
z.nisbi() -> "2 saat əvvəl"
// Hesablama
z.əlavə(gün: 5, saat: 3) -> Zaman
z.çıx(ay: 1) -> Zaman
z.fərq(digər) -> Müddət
z.əvvəldir(digər) -> məntiq
z.sonradır(digər) -> məntiq
z.arasındadır(a, b) -> məntiq
// Müddət
vaxt.müddət(saat: 2, dəqiqə: 30)
m.saniyəyə() -> tam
m.insanÜçün() -> "2 saat 30 dəqiqə"
// Zaman qurşağı
vaxt.qurşaq("Asia/Baku")
z.qurşağaÇevir("UTC") -> Zaman
// Gözləmə
gözlə vaxt.gözlə(1000)Azərbaycan dilində ay və gün adları#
vaxt.ayAdı(10) -> "oktyabr"
vaxt.ayAdıBaş(10) -> "Oktyabr"
vaxt.günAdı(1) -> "bazar ertəsi"
vaxt.günAdıQısa(1) -> "B.e."
vaxt.ayAdları() -> ["yanvar", "fevral", ..., "dekabr"]
vaxt.bayramdır(tarix) -> məntiq // Azərbaycan rəsmi bayramları10.9 fayl və qovluq#
gətir fayl
gətir qovluq
gətir yol
// Fayl oxuma/yazma
fayl.oxu("a.txt") -> mətn
fayl.oxuBayt("a.bin") -> siyahı[bayt]
fayl.oxuSətirlər("a.txt") -> siyahı[mətn]
fayl.yaz("a.txt", "məzmun")
fayl.yazBayt("a.bin", baytlar)
fayl.əlavəEt("a.txt", "yeni sətir\n")
// Axın (böyük fayllar üçün)
istifadə f = fayl.aç("böyük.txt", "oxu")
hər sətir üçün f.sətirlər() içində
yaz(sətir)
son
son
// Rejimlər: "oxu" | "yaz" | "əlavə" | "oxu-yaz"
// Fayl əməliyyatları
fayl.vardır("a.txt") -> məntiq
fayl.sil("a.txt")
fayl.kopyala("a.txt", "b.txt")
fayl.köçür("a.txt", "b.txt")
fayl.adDəyiş("a.txt", "b.txt")
fayl.ölçü("a.txt") -> tam
fayl.dəyişməVaxtı("a.txt") -> Zaman
fayl.icazə("a.txt") -> mətn // "rw-r--r--"
fayl.icazəQoy("a.txt", "755")
fayl.sahib("a.txt") -> mətn
fayl.simvolikKeçid("a", "b")
fayl.MIMETipi("a.png") -> "image/png"
fayl.heş("a.txt", "sha256") -> mətn
// Qovluq
qovluq.yarat("yeni")
qovluq.yaratDərin("a/b/c")
qovluq.sil("yeni")
qovluq.silDərin("a")
qovluq.vardır("a") -> məntiq
qovluq.siyahı("a") -> siyahı[mətn]
qovluq.siyahıDərin("a") -> siyahı[mətn]
qovluq.axtar("a", "*.alq") -> siyahı[mətn]
qovluq.cari() -> mətn
qovluq.dəyiş("/home")
qovluq.ev() -> mətn
qovluq.müvəqqəti() -> mətn
qovluq.izlə("a", (hadisə, yol) => yaz("{hadisə}: {yol}"))
// Yol
yol.birləşdir("a", "b", "c.txt") -> "a/b/c.txt"
yol.mütləq("a.txt") -> "/home/v/a.txt"
yol.qovluq("/a/b/c.txt") -> "/a/b"
yol.fayl("/a/b/c.txt") -> "c.txt"
yol.ad("/a/b/c.txt") -> "c"
yol.uzantı("/a/b/c.txt") -> ".txt"
yol.normalizə("a/./b/../c") -> "a/c"
yol.nisbi("/a/b", "/a/b/c") -> "c"
yol.ayırıcı -> "/"10.10 json#
gətir json
json.oxu('{"ad": "Aysel"}') -> istənilən
json.yaz(obyekt) -> mətn
json.yazGözəl(obyekt) -> mətn // girintili
json.faylOxu("a.json") -> istənilən
json.faylYaz("a.json", obyekt)
// Tipli çevirmə
sinif İstifadəçi
xassə ad: mətn
xassə yaş: tam
son
dəyişən i = json.oxuTipli[İstifadəçi]('{"ad":"Aysel","yaş":24}')
dəyişən m = json.yaz(i)
// Annotasiyalarla idarə
sinif İstifadəçi
@json("user_name")
xassə ad: mətn
@jsonAtla
xassə gizliSahə: mətn
@jsonStandart(18)
xassə yaş: tam
son10.11 naxış — requlyar ifadələr#
gətir naxış
dəyişən n = naxış.qur(x"(\d{3})-(\d{4})")
n.uyğundur("555-1234") -> məntiq
n.tap("tel: 555-1234") -> Uyğunluq?
n.hamısınıTap(mətn) -> siyahı[Uyğunluq]
n.əvəz(mətn, "XXX-XXXX") -> mətn
n.əvəzFunksiya(mətn, (u) => u.qrup(1)) -> mətn
n.böl(mətn) -> siyahı[mətn]
// Uyğunluq obyektі
u.mətn() -> mətn
u.başlanğıc() -> tam
u.son() -> tam
u.qrup(1) -> mətn?
u.adlıQrup("il") -> mətn?
u.qruplar() -> siyahı[mətn?]
// Bayraqlar
naxış.qur(x"abc", "i") // hərfə həssas deyil
naxış.qur(x"^a", "m") // çoxsətirli
naxış.qur(x"a.b", "s") // nöqtə yeni sətri də tutur
naxış.qur(x"a b", "x") // boşluqlar nəzərə alınmır
// Azərbaycan hərfləri dəstəklənir
naxış.qur(x"[əöüçşğıİ]+")
naxış.qur(x"\p{L}+") // Unicode hərf sinfi10.12 şəbəkə və http#
gətir http
// Sadə sorğular
dəyişən c = gözlə http.al("https://api.nümunə.az/istifadəçilər")
yaz(c.kod()) // 200
yaz(c.mətn())
yaz(c.json())
yaz(c.başlıq("Content-Type"))
gözlə http.göndər("https://api.az/qeyd", gövdə: {"ad": "Aysel"})
gözlə http.yenilə(url, gövdə: ...) // PUT
gözlə http.yamaq(url, gövdə: ...) // PATCH
gözlə http.sil(url)
// Tam nəzarətlə
dəyişən sorğu = yeni http.Sorğu("GÖNDƏR", url)
sorğu.başlıq("Authorization", "Bearer {token}")
sorğu.başlıq("Accept", "application/json")
sorğu.gövdə(json.yaz(verilənlər))
sorğu.vaxtLimiti(5000)
dəyişən c = gözlə sorğu.göndər()
// Fayl yükləmə
gözlə http.faylYüklə(url, "yüklənən.zip", (faiz) => yaz("{faiz}%"))
gözlə http.faylGöndər(url, "sənəd.pdf")
// Cavab: c.kod(), c.uğurlu(), c.yoxla() (4xx/5xx → HTTPXətası),
// c.mətn(), c.json(), c.bayt(), c.başlıq(ad), c.başlıqlar(), c.url()
// Xətalar: BağlantıXətası, VaxtBitdiXətası. Yalnız http(s):// — file:// yox.
// WebSocket (RFC 6455) — `ws://` və `wss://`
dəyişən sk = gözlə http.vebSoket("wss://nümunə.az/soket") // başlıqlar, vaxtLimiti
sk.hadisə("mesaj", (m) => yaz(m)) // və ya hadisəsiz: sk.al(5000)
sk.hadisə("bağlandı", (kod, səbəb) => yaz("bağlandı {kod}"))
sk.göndər("salam") // mətn; bayt → ikili; siyahı/lüğət → JSON
sk.bağla()
// Aşağı səviyyə TCP/UDP
gətir şəbəkə
dəyişən s = gözlə şəbəkə.TCPBağlan("nümunə.az", 80)
dəyişən d = şəbəkə.UDPSoket(5000)10.13 verilənlər — verilənlər bazası#
gətir verilənlər
// Bağlantı
dəyişən b = gözlə verilənlər.bağlan("postgres://user:pass@localhost/db")
dəyişən b = gözlə verilənlər.bağlan("sqlite://./məlumat.db")
dəyişən b = gözlə verilənlər.bağlan("mysql://...")
// Sürücülər asılılıqsızdır: sqlite (+ "sqlite::yaddaş:"), PostgreSQL
// (protokol v3; SCRAM-SHA-256/md5; ?sslmode=disable|prefer|require|verify-full),
// MySQL/MariaDB (native və caching_sha2 parolu; ?ssl=true). Parametrlər
// ($1… və ya ?) SQL-ə yapışdırılmır. Funksiyalar sinxrondur, `gözlə` də işləyir.
// Sorğu
dəyişən sətirlər = gözlə b.sorğu("SELECT * FROM istifadəçilər WHERE yaş > $1", 18)
hər s üçün sətirlər içində
yaz(s["ad"])
son
dəyişən bir = gözlə b.birSətir("SELECT * FROM istifadəçilər WHERE id = $1", 5)
dəyişən say = gözlə b.birDəyər("SELECT COUNT(*) FROM istifadəçilər")
gözlə b.icra("INSERT INTO istifadəçilər (ad) VALUES ($1)", "Aysel")
// Tranzaksiya
gözlə b.tranzaksiya(asinxron funksiya(t)
gözlə t.icra("UPDATE hesab SET balans = balans - 100 WHERE id = 1")
gözlə t.icra("UPDATE hesab SET balans = balans + 100 WHERE id = 2")
son)
// Sorğu qurucusu (ORM)
dəyişən istifadəçilər = gözlə b.cədvəl("istifadəçilər")
.seç("ad", "email")
.harada("yaş", ">", 18)
.vəHarada("aktiv", "=", doğru)
.sırala("ad")
.limit(10)
.al()
// Yaradılan sətir: b.cədvəl("t").əlavəEt({...}) -> id; şərtsiz yenilə/sil
// qadağandır (təsadüfən bütün cədvəli silməyin qarşısı alınır)
// Model (ORM) — bütün sürücülərdə işləyir
@cədvəl("istifadəçilər") // yoxdursa — sinif adı
sinif İstifadəçi miras verilənlər.Model
@açar // yoxdursa — `id` xassəsi
xassə id: tam
@sütun("tam_ad") // bazadakı sütunun adı fərqlidirsə
xassə ad: mətn
xassə poçt: mətn?
@keçici // bazada saxlanılmır
xassə seçilib: məntiq = yanlış
@əlaqə(çox: Sifariş) // Sifariş.istifadəçiId → id
xassə sifarişlər: siyahı[Sifariş] = []
son
// @əlaqə(bir: İstifadəçi, açar: "istifadəçiId") — əks istiqamət
İstifadəçi.istifadəEt(b) // və ya verilənlər.Model.istifadəEt(b)
İstifadəçi.cədvəlYarat() // CREATE TABLE IF NOT EXISTS (tiplərdən)
dəyişən i = İstifadəçi.yarat({"ad": "Aysel"}) // INSERT, id doldurulur
i.ad = "Aysel Məmmədova"
i.saxla() // id 0/boş → INSERT, yoxsa UPDATE
dəyişən t = İstifadəçi.tap(5) // nümunə və ya boş
dəyişən hamısı = İstifadəçi.harada("ad", "bənzər", "A%").sırala("ad").al()
İstifadəçi.hamısı(); İstifadəçi.say()
i.yüklə("sifarişlər") // əlaqəni doldurur və qaytarır
i.lüğət() // {"id": …, "ad": …}
i.sil()
// Miqrasiya: qovluqdakı 001_*.sql, 002_*.sql … ardıcıl, hər biri bir dəfə,
// tranzaksiyada (yarımçıq qalmır)
b.miqrasiyaEt("miqrasiyalar/")10.14 şifrə — kriptoqrafiya#
gətir şifrə
şifrə.heş("mətn") -> mətn // sha256, hex
şifrə.heş("mətn", "sha512") -> mətn // + sha1, sha3_256, blake2b …
şifrə.HMAC("mesaj", "açar") -> mətn
şifrə.parolHeş("parol") -> mətn // "$scrypt$…" (duzlu)
şifrə.parolYoxla("parol", heş) -> məntiq // sabit zamanlı
şifrə.açarYarat() -> bayt // 32 bayt
şifrə.parolAçarı(parol, duz) -> bayt // paroldan AES açarı
şifrə.şifrələ(verilən, açar) -> bayt // AES-256-GCM
şifrə.şifrəAç(şifrəli, açar) -> bayt // dəyişdirilibsə xəta
şifrə.şifrəAçMətn(şifrəli, açar) -> mətn
şifrə.təsadüfiBayt(32) -> bayt
şifrə.təsadüfiMətn(32) -> mətn // URL-təhlükəsiz
şifrə.UUID() -> mətn
şifrə.bərabərdir(a, b) -> məntiq // sabit zamanlı müqayisə
şifrə.tokenYarat(verilənlər, açar, müddət: 3600) -> mətn // JWT HS256
şifrə.tokenOxu(token, açar) -> lüğət // imza + exp yoxlanılırQeydlər:
- Ad:
JWTYaratyox,tokenYarat— Azərbaycan əlifbasındaWyoxdur, ona görə Alqor adlarında da işlənə bilməz (§ 1.2). - Parol heşi: etalon implementasiyada scrypt (N=2¹⁵, r=8, p=1); Python-un standart kitabxanasında Argon2 yoxdur. Format özünü təsvir edir, ona görə gələcəkdə Argon2id-ə keçid köhnə heşləri pozmur.
- Şifrəli format:
01 | nonce(12) | şifrəli | etiket(16). tokenOxuyalnızHS256/384/512qəbul edir —alg: nonerədd edilir. Xətalar:ŞifrələməXətası,JWTXətası.
10.15 sistem#
gətir sistem
sistem.arqumentlər() -> siyahı[mətn]
sistem.mühit("YOL") -> mətn?
sistem.mühitQoy("AÇAR", "dəyər")
sistem.mühitHamısı() -> lüğət[mətn, mətn]
sistem.platforma() -> "linux" | "windows" | "macos" | "veb"
sistem.memarlıq() -> "x64" | "arm64"
sistem.nüvəSayı() -> tam
sistem.yaddaş() -> kortej[tam, tam] // (istifadə olunan, ümumi)
sistem.istifadəçi() -> mətn
sistem.hostAdı() -> mətn
sistem.işləməMüddəti() -> Müddət
sistem.dayan(kod: tam)
sistem.əmr("ls -la") -> mətn // xarici əmr işlət
sistem.proses("ls", ["-la"]) -> Proses10.16 test#
gətir test
@sınaq
funksiya toplamaDüzgündür()
test.bərabər(topla(2, 2), 4)
test.bərabər(topla(-1, 1), 0, "sıfır alınmalıdır")
son
@sınaq("Boş siyahı 0 qaytarır")
funksiya boşSiyahı()
test.bərabər(cəm([]), 0)
son
// Təsdiqlər
test.bərabər(a, b)
test.bərabərDeyil(a, b)
test.doğru(şərt)
test.yanlış(şərt)
test.boş(dəyər)
test.boşDeyil(dəyər)
test.ehtiva(kolleksiya, element)
test.atır(() => risk(), ArqumentXətası)
test.atmır(() => təhlükəsiz())
test.təxminən(3.14159, 3.14, dəqiqlik: 0.01)
test.uyğun(mətn, naxış)
test.uğursuz("səbəb") // sınağı dərhal uğursuz edir
// `test.atır` tutulan xətanı qaytarır — mesajını yoxlamaq olar
dəyişən x = test.atır(() => böl(1, 0), BölməXətası)
test.ehtiva(x.mesaj, "sıfır")
// Atlamaq
@atla("hələ yazılmayıb")
@sınaq
funksiya gələcək() ... son
// Qruplaşdırma
@sınaqQrupu("İstifadəçi testləri")
modul istifadəçiTestləri
@əvvəl
funksiya hazırla() ... son
@sonra
funksiya təmizlə() ... son
@sınaq
funksiya yaratma() ... son
son
// Parametrli testlər
@sınaqVerilənlər([(1, 1), (2, 4), (3, 9)])
funksiya kvadratTesti(giriş: tam, gözlənilən: tam)
test.bərabər(kvadrat(giriş), gözlənilən)
son
// Saxta obyektlər (planlaşdırılır)
dəyişən saxta = test.saxta[VerilənlərBazası]()
saxta.gözlə("tap").qaytarsın(istifadəçi)
test.yoxla(saxta.çağırıldı("tap", 1))Çalışdırma: alqortest və ya alqortest sınaq/istifadəçi_sınaq.alq
10.17 Digər modullar#
Etalon implementasiyada hər modul alqorc/alqor/modullar/ daxilində ayrıca fayldır və yalnız gətir olunanda yüklənir. Faylın başındakı sənəd modulun tam arayışıdır.
| Modul | Təyinatı | Vəziyyət |
|---|---|---|
jurnal | Loglama | ✅ |
kodlaşdırma | Base64, hex, URL, sorğu sətri, HTML, UTF-8, CRC32, slug | ✅ |
csv | CSV oxuma/yazma — ayırıcı: "avto", çevir:, Excel üçün bom: | ✅ |
toml | TOML 1.0 oxuma + yazma | ✅ |
yaml | YAML 1.2 (bloklar, axın, | >, ankor/alias, <<, çox sənəd) | ✅ |
xml | XML → düyün ağacı, CSS seçicisi, lüğətə/lüğətdən; <!ENTITY> rədd edilir | ✅ |
html | HTML ayırıcı (tap, tapHamısı), mətnə, XSS təmizlə | ✅ |
konfiq | TOML/YAML/JSON/ENV/INI, fayl birləşdirmə, mühit dəyişəni ilə əvəzləmə | ✅ |
sıxma | gzip, zlib, zip, tar (zip-slip və keçid hücumlarına qarşı yoxlama) | ✅ |
şifrə | Bölmə 10.14 | ✅ |
http, şəbəkə | Bölmə 10.12 (WebSocket daxil) | ✅ |
verilənlər | Bölmə 10.13 (SQLite, PostgreSQL, MySQL; ORM) | ✅ |
şəkil | PNG/JPEG/GIF/BMP/PPM oxuma-yazma (xarici kitabxanasız), ölçü, kəsmə, döndərmə, filtrlər, çəkmə, EXIF istiqaməti | ✅ |
poçt | E-poçt: məktub qurma (HTML, əlavələr), SMTP (STARTTLS/SSL), sınaq() qutusu, məktub oxuma | ✅ |
keş | Yaddaş (LRU + müddət), fayl və Redis keşi; hesabla, artır, bük | ✅ |
növbə | Fon iş növbəsi: işçilər, prioritet, gecikmə, təkrar cəhdlər | ✅ |
planlayıcı | Cron ifadələri (AZ ay/gün adları), hər, sonra, vaxtında | ✅ |
validasiya | Zəncirvari qaydalar, sxemlər; telefon, FİN, VÖEN, IBAN, kart | ✅ |
lokalizasiya | Tərcümələr (JSON/TOML/YAML), cəm formaları, ədəd/tarix/nisbi vaxt | ✅ |
pul | Dəqiq pul hesabı, valyutalar, bölüşdürmə, formatlama; + - * / < operatorları | ✅ |
qrafik | SVG/HTML diaqramlar: sütun, zolaq, xətt, sahə, dairə, halqa, nöqtə, histogram | ✅ |
pdf | PDF: başlıq, abzas (**qalın**, *kursiv*), siyahı, cədvəl, şəkil, səhifə nömrələri; TrueType alt dəst (ə ğ ş ı İ ₼) | ✅ |
ffi | C kitabxanaları: funksiyalar, strukturlar, buferlər, geri çağırışlar | ✅ |
veb | Veb freymvork (Bölmə 11) | ✅ |
pəncərə | Desktop GUI (Bölmə 12) | ✅ |
şəkil, qrafik, pdf, ffi#
gətir şəkil
şəkil.aç("foto.jpg").miniatür(300, 300).saxla("kiçik.jpg", keyfiyyət: 85)
şəkil.aç("foto.jpg").kəs(10, 10, 200, 100).boz().bulanıq(2).saxla("parça.png")
dəyişən kətan = şəkil.yarat(400, 200, "ağ").düzbucaqlı(20, 20, 160, 80, "mavi")
gətir qrafik
qrafik.sütun(etiketlər: ["Yan", "Fev"], seriyalar: [{"ad": "Satış", "dəyərlər": [12, 19]}],
başlıq: "Aylıq satış").saxla("satış.svg")
qrafik.halqa(etiketlər: ["Bitib", "Qalıb"], dəyərlər: [72, 28], mərkəz: "72%")
gətir pdf
dəyişən s = pdf.sənəd(başlıq: "Hesabat")
s.başlıq("Aylıq hesabat")
s.abzas("Satış **12%** artıb.")
s.cədvəl([["Məhsul", "Qiymət"], ["Alma", "1,20 ₼"]], zolaqlı: doğru)
s.səhifəNömrələri("Səhifə [n] / [cəm]")
s.saxla("hesabat.pdf")
gətir ffi
dəyişən strlen = ffi.yüklə("c").funksiya("strlen", qaytarır: "ölçü", parametrlər: ["mətn"])
yaz(strlen("salam")) // 5şəkil və pdf təmiz Python-dadır: böyük fotolarda (10+ meqapiksel) əməliyyatlar saniyələr çəkə bilər. pdf sistemin TrueType şriftini (DejaVu, Arial, Liberation, Noto, Segoe UI) daxil edir; əsas şriftdə olmayan simvollar (məs. ₼) ehtiyat şriftdən götürülür.
pul, keş, növbə, planlayıcı, validasiya, lokalizasiya, poçt#
gətir pul
dəyişən qiymət = pul.yarat("19.99", "AZN")
dəyişən cəm = qiymət * 3 + pul.yarat(5, "AZN") // 64.97 AZN (dəqiq)
yaz(cəm.formatla()) // "64,97 ₼"
yaz(pul.yarat(100).böl(3)) // [33.34, 33.33, 33.33] — qəpik itmir
gətir keş
dəyişən k = keş.yaddaş(maks: 1000, müddət: 60)
dəyişən hesabat = k.hesabla("hesabat", () => ağırHesabat())
dəyişən r = keş.redis("redis://:parol@127.0.0.1:6379/0", ön: "tətbiq:")
gətir növbə
dəyişən n = növbə.yarat(işçilər: 4, cəhd: 3)
dəyişən iş = n.göndər(məktubGöndər, "a@b.az")
yaz(iş.nəticə())
gətir planlayıcı
dəyişən p = planlayıcı.yarat()
p.cron("0 9 * * b.e-c", səhərHesabatı) // iş günləri 09:00
p.hər(30, yoxla)
p.başlat()
gətir validasiya
dəyişən v = validasiya
dəyişən s = v.sxem({"ad": v.mətn().kəs().min(2), "yaş": v.tam().aralıq(18, 120),
"epoçt": v.ePoçt(), "telefon": v.telefon().ixtiyari()})
dəyişən nəticə = s.yoxla(forma) // etibarlıdır(), xətalar(), dəyərlər()
gətir lokalizasiya
dəyişən t = lokalizasiya.yüklə("dillər", standart: "az")
yaz(t.dil("ru").t("mesaj", say: 3)) // "3 сообщения"
yaz(lokalizasiya.tarix("2026-10-07")) // "7 oktyabr 2026"
gətir poçt
dəyişən m = poçt.məktub(kimdən: "bot@alqor.az", kimə: "a@b.az",
mövzu: "Salam", mətn: "…", əlavələr: ["hesabat.pdf"])
poçt.smtp("smtp.nümunə.az", istifadəçi: "…", parol: mühit("SMTP_PAROL")).göndər(m)Hər modulun tam arayışı alqorc/alqor/modullar/<modul>.py faylının başındadır. Kitabxana obyektləri operator dəstəkləyə bilər (alqor_operator protokolu) — tip yoxlayıcısı pul + pul-u tanıyır, pul + tam-ı ALQ-T008 ilə rədd edir.
düyün — XML və HTML ağacı#
gətir html
dəyişən s = html.oxu(mətn)
dəyişən başlıq = s.tap("title")?.mətn() ?? "başlıqsız"
hər a üçün s.tapHamısı("nav > a[href]") içində
yaz(a.mətn(), a.atribut("href"))
sonMetodlar: ad(), atribut(ad, standart?), atributlar(), atributQoy(ad, d), mətn(), uşaqlar(), valideyn(), tap(seçici) → düyün?, tapHamısı(seçici), əlavəEt(u), xml(gözəl?), html(), lüğət(). Seçici: teq, .sinif, #id, [atr], [atr=d] (^= $= *= ~= |=), nəsil, >, ,.
Yeni xəta tipləri#
CSVXətası, TOMLXətası, YAMLXətası, XMLXətası, SıxmaXətası, KodlaşdırmaXətası — hamısı FormatXətası-nın alt növüdür; KonfiqXətası, ŞifrələməXətası (→ JWTXətası), VerilənlərXətası (→ MəhdudiyyətXətası) — Xəta-nın; HTTPXətası — ŞəbəkəXətası-nın.